package com.proxy.dynamicproxy;

import java.lang.reflect.Proxy;

/**
 * 动态代理
 *
 * @author Administrator
 *
 */
public class Test {

	public static void consumer(DoSome dosome) {
		dosome.doSomething();
		dosome.somethingElse("bonobo");
	}

	public static void main(String[] args) {
		RealObject real = new RealObject();
		consumer(real);

		//调用newProxyInstance方法创建动态代理，参数：类加载器；一个你希望该代理实现的接口；以及一个DynamicProxyHandler接口的实现
		//loader:　　一个ClassLoader对象，定义了由哪个ClassLoader对象来对生成的代理对象进行加载
		//interfaces:　　一个Interface对象的数组，表示的是我将要给我需要代理的对象提供一组什么接口，如果我提供了一组接口给它，那么这个代理对象就宣称实现了该接口(多态)，这样我就能调用这组接口中的方法了
		//h:　　一个InvocationHandler对象，表示的是当我这个动态代理对象在调用方法的时候，会关联到哪一个InvocationHandler对象上
		DoSome doSome = (DoSome) Proxy.newProxyInstance(
				DoSome.class.getClassLoader(), new Class[] { DoSome.class },
				new DynamicProxyHandler(real));
		consumer(doSome);
	}

}
